package Verwaltung.Daten.Interfaces;

import java.util.List;

import Verwaltung.Datencontroler.IDBObjekt;

public interface IAktivitaet extends IDBObjekt {

	/**
	 * Gibt die Liste der Klassen zurueck.
	 * 
	 * @return List<IKlasse> Liste der Klassen
	 */
	public List<IKlasse> getKlassen();

	/**
	 * Gibt alle betieligte Lherkraefte(Betreuer und Lehrer) zurueck
	 * 
	 * @return Lehrkraefte die der Aktivitaet zugeordnet sind
	 */
	public List<ILehrkraft> getLehrkraefte();

	/**
	 * Gibt den Startzeitpunkt samt Wochentag zurueck. In der Form
	 * "Wochentag // HH:MM" // sind Zeielnumbrueche
	 */
	public String getZeitraum();

	/**
	 * Gibt den Endzeitpunkt samt Wochentag zurueck. In der Form
	 * "Wochentag // HH:MM" // sind Zeielnumbrueche
	 */
	public String getEnde();

	/**
	 * Gibt den Namen der Aktivitaet zurueck zB. Pause oder Mathe
	 * 
	 * @return Name
	 */
	public String getName();

	/**
	 * Setzt das neue Startdatum der Aktivitaet Valide Eingaben sind: 1. HH:MM
	 * 2. H:MM 3. HH 4. H Ueberpruft auf die Korrektheit der Zeitangaben. Diese
	 * Methode Aktualisiert ebenfalls den Endzeitpunkt.
	 * 
	 * @param start
	 *            Die neue Startzeit der Aktivitaet
	 */
	public void setStart(String start);

	/**
	 * Aktualisiert die Dauer der Aktivitaet. Die Dauer darf nur in Stunden
	 * ausgedrueckt werden. Die Methode ueberprueft nicht die Laenge der Dauer.
	 * Aktualisiert ebenfalls den Endzeitpunkt
	 * 
	 * @param d
	 *            Dauer der Aktivitaet, ganzzahlige Stunden
	 */
	public void setDauer(String d);

	/**
	 * Setzt den Namen der Aktivitaet
	 * 
	 * @param n
	 *            Name
	 */
	public void setName(String n);

	/**
	 * Fuegt eine Lehrkraft zu dieser Aktivitaet hinzu. Ueberpruft ob der
	 * Paramet null ist, das Limit an Lehrkraeften erreicht ist und ob die
	 * Lehrkraft bereits vorhanden ist.
	 * 
	 * @param lehrkraft
	 *            Lehrkraft die hinzugefuegt werden soll
	 */
	public void addLehrkraft(ILehrkraft lehrkraft);

	/**
	 * Fuegt eine Klasse zu dieser Aktivitaet hinzu Die Methode prueft ob der
	 * Parameter null ist, die maximalAnzahl von Klassen erreicht ist und ob die
	 * Klasse bereits vorhanden ist, anhand des Namens.
	 * 
	 * @param klasse
	 *            Klasse die hinzugefuegt werden soll
	 */
	public void addKlasse(IKlasse klasse);

	/**
	 * Entfernt die Lehrkraft aus dieser Aktivitaet. Ueberprueft ob der
	 * Parameter null ist und ob die Lehrkaft ueberhaupt in der Aktivitaet
	 * vorhanden ist.
	 * 
	 * @param l
	 *            Lehrkraft die entfernt werden soll.
	 */
	public void removeLehrkraft(ILehrkraft lehrkraft);

	/**
	 * Entfernt die Klasse aus diese Aktivitaet. Ueberprueft ob der Parameter
	 * null ist und ob die Klasse ueberhaupt in der Aktivitaet vorhanden ist.
	 * 
	 * @param k
	 *            Klasse die entfernt werden soll.
	 */
	public void removeKlasse(IKlasse klasse);

	/**
	 * Getter der Dauer der Aktivitaet
	 * 
	 * @return Dauer der Aktivitaet
	 */
	public int getDauer();

	/**
	 * Gibt den Wochentag als String zurueck.
	 * 
	 * @return String wochentag
	 */
	public String getWochentag();

	/**
	 * Gibt nur die Startstunde als Int zurueck.
	 * 
	 * @return int stunde
	 */
	public int getStartHour();

	/**
	 * Gibt die Startminute als Int zurueck.
	 * 
	 * @return int minute
	 */
	public int getStartMinute();

	/**
	 * Gibt die ID der Aktivitaet zurueck.
	 * 
	 * @return int ID
	 */
	public int getId();

	/**
	 * Sagt aus ob die Aktivitaet ein dumm ist.
	 * 
	 * @return boolean
	 */
	public boolean isDummy();

	/**
	 * Gibt den Startzeitpunkt als String aus
	 * 
	 * @return start uhrzeit
	 */
	public String getStart();
}
